
object work2 {
  def main(args: Array[String]): Unit = {

    // Car类
    class Car(val licensePlate: String, val brand: String, val color: String, var price: Double) {
      // 驾驶方法，接受一个距离参数，并打印出行驶了多少公里
      def drive(distance: Double): Unit = {
        println(s"Driving $distance kilometers.")
      }

      // 停车方法，打印停车信息
      def park(): Unit = {
        println(s"Parking the car with license plate $licensePlate.")
      }

      // 加油方法，接受一个油量参数，并打印加油了多少升
      def refuel(amount: Double): Unit = {
        println(s"Refueling $amount liters of gas.")
      }
    }

    // ElectricCar子类，继承了Car类的基本属性和方法，并添加了电池容量和续航里程属性以及充电方法
    class ElectricCar(licensePlate: String, brand: String, color: String, price: Double,
                      val batteryCapacity: Double, var range: Double) extends Car(licensePlate, brand, color, price) {

      // 充电方法，接受一个电量参数，并更新续航里程属性，打印充电了多少度电
      def charge(amount: Double): Unit = {
        range += amount * batteryCapacity / 100 // 假设每充一度电可以增加batteryCapacity/100公里的续航里程
        println(s"Charging $amount kilowatts of electricity.")
      }

      // 驾驶方法，重写了父类的drive方法，在驾驶前检查续航里程是否足够，如果不够则无法驾驶，并打印相应的信息
      override def drive(distance: Double): Unit = {
        if (range >= distance) { // 如果续航里程大于等于要行驶的距离，则可以正常驾驶，并更新续航里程属性
          super.drive(distance) // 调用父类的drive方法打印行驶信息
          range -= distance // 更新续航里程属性
        } else { // 如果续航里程小于要行驶的距离，则无法正常驾驶，并提示用户需要充电
          println(s"Cannot drive $distance kilometers. The battery range is only $range kilometers. Please charge first.")
        }

      }
    }

    val drive1 = new Car("123", "aaa", "red", 147000)
    drive1.drive(123)
    drive1.park()
    drive1.refuel(100)

    val drive2 = new ElectricCar("456", "bbb","green", 250000,
      1000, 123)
    drive2.charge(100)

  }
}
